package Vue;

import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.LinkedList;

import javax.swing.JButton;
import javax.swing.JPanel;

import Controleur.EcouteurClient;
import Modele.Modele;
import Modele.Restaurant;


public class AffichageClient implements InterfaceAffichage
{

	private static AffichageClient affichage;
	private static int MAX_NB_RESTOS = 6;
	
	private LinkedList<Restaurant> listeRestaurant;
	
	private static int indiceRestaurant = 0;
	
	EcouteurClient ecouteur;
	
	LinkedList<JButton> boutonsRestaurants;
	
	JButton BN_resto1;
	JButton BN_resto2;
	JButton BN_resto3;
	JButton BN_resto4;
	JButton BN_resto5;
	JButton BN_resto6;
	
	JButton BN_panier;
	JButton BN_precedant;
	JButton BN_suivant;
	JButton BN_quitter;
	
	JPanel PN_panneau;
	
	private AffichageClient(Modele modele)
	{
		
		ecouteur = new EcouteurClient();
		this.listeRestaurant = modele.getRestaurants();
		boutonsRestaurants = new LinkedList<JButton>();
		
		// PANNEAU D'AFFICHAGE
		PN_panneau = new JPanel();
		PN_panneau.setBounds(10,75,713,350);
		PN_panneau.setVisible(true);
		PN_panneau.setBackground(new Color(106, 106, 106));
		
		// BOUTONS PANIER
		BN_panier = new JButton("Panier de commande");
		BN_panier.setBounds(550,25,170,25);
		BN_panier.setVisible(true);
		BN_panier.addActionListener(ecouteur);
		
		// BOUTONS RESTAURANT
		BN_resto1 = new JButton();
		BN_resto1.setBounds(80,85,150,150);
		BN_resto1.setVisible(true);
		BN_resto1.addActionListener(ecouteur);
		boutonsRestaurants.add(BN_resto1);
		
		BN_resto2 = new JButton();
		BN_resto2.setBounds(290,85,150,150);
		BN_resto2.setVisible(true);
		BN_resto2.addActionListener(ecouteur);
		boutonsRestaurants.add(BN_resto2);
		
		BN_resto3 = new JButton();
		BN_resto3.setBounds(498,85,150,150);
		BN_resto3.setVisible(true);
		BN_resto3.addActionListener(ecouteur);
		boutonsRestaurants.add(BN_resto3);
		
		BN_resto4 = new JButton();
		BN_resto4.setBounds(80,255,150,150);
		BN_resto4.setVisible(true);
		BN_resto4.addActionListener(ecouteur);
		boutonsRestaurants.add(BN_resto3);
		
		BN_resto5 = new JButton();
		BN_resto5.setBounds(290,255,150,150);
		BN_resto5.setVisible(true);
		BN_resto5.addActionListener(ecouteur);
		boutonsRestaurants.add(BN_resto4);
		
		BN_resto6 = new JButton();
		BN_resto6.setBounds(498,255,150,150);
		BN_resto6.setVisible(true);
		BN_resto6.addActionListener(ecouteur);
		boutonsRestaurants.add(BN_resto5);
		
		// BOUTONS NAVIGATION
		BN_precedant = new JButton("<<");
		BN_precedant.setBounds(PN_panneau.getX(),PN_panneau.getY(),50,PN_panneau.getHeight());
		BN_precedant.setVisible(true);
		BN_precedant.addActionListener(new NavigateurRestaurant());
		boutonsRestaurants.add(BN_resto6);
		
		BN_suivant = new JButton(">>");
		BN_suivant.setBounds(PN_panneau.getX()+PN_panneau.getWidth()-50,
								PN_panneau.getY(),50,PN_panneau.getHeight());
		BN_suivant.setVisible(true);
		BN_suivant.addActionListener(new NavigateurRestaurant());
		
		// BOUTONS QUITTER
		BN_quitter = new JButton("Quitter");
		BN_quitter.setBounds(PN_panneau.getX()+PN_panneau.getWidth()-100,
								PN_panneau.getY()+PN_panneau.getHeight()+5,100,25);
		BN_quitter.setVisible(true);
		BN_quitter.addActionListener(ecouteur);
		
		
		int i = 0;
		int j = indiceRestaurant;
		
		while ( j < MAX_NB_RESTOS && i < MAX_NB_RESTOS )
		{
			System.out.println( i + " " + j + " " + listeRestaurant.get(j).getNomRestaurant() );
			boutonsRestaurants.get(i).setText(listeRestaurant.get(j).getNomRestaurant());
			++i;
			++j;
		}
	}
	
	public void afficher(Container contentPane)
	{	
		contentPane.add(BN_panier);
		contentPane.add(BN_suivant);
		contentPane.add(BN_precedant);
		contentPane.add(BN_quitter);
		contentPane.add(BN_resto1);
		contentPane.add(BN_resto2);
		contentPane.add(BN_resto3);
		contentPane.add(BN_resto4);
		contentPane.add(BN_resto5);
		contentPane.add(BN_resto6);
		
		contentPane.add(PN_panneau);
	}
	
	public static AffichageClient getAffichage(Modele modele)
	{
		if( affichage == null )
			affichage = new AffichageClient(modele);
		return affichage;
	}

	private class NavigateurRestaurant implements ActionListener
	{

		public void actionPerformed(ActionEvent arg0) {
			
			JButton source = (JButton)arg0.getSource();
			if( source.getText() == "<<" )
			{
				if ( indiceRestaurant >= 6 )
				{
					indiceRestaurant = indiceRestaurant - 6;
					int i = 0;
					int j = indiceRestaurant;
					
					for( int k = 0; k < MAX_NB_RESTOS; ++k )
						boutonsRestaurants.get(k).setText("");
					
					while ( j < listeRestaurant.size() && i < MAX_NB_RESTOS )
					{
						boutonsRestaurants.get(i).setText(listeRestaurant.get(j).getNomRestaurant());
						++j;
						++i;
					}
				}
			}
			else
			{
				if ( (indiceRestaurant + 6 ) < listeRestaurant.size() )
				indiceRestaurant = indiceRestaurant + 6;
				int i = 0;
				int j = indiceRestaurant;
				
				for( int k = 0; k < MAX_NB_RESTOS; ++k )
					boutonsRestaurants.get(k).setText("");
				
				while ( j < listeRestaurant.size() && i < MAX_NB_RESTOS  )
				{
					boutonsRestaurants.get(i).setText(listeRestaurant.get(j).getNomRestaurant());
					j++;
					++i;
				}
			}
			
		}
		
	}
	
}
